package main

import (
	"fmt"
	"time"
)                  

func main() {
	// 定义一个有10个int数据的管道
	intChan := make(chan int, 10)
	for i := 0; i < 10; i++ {
		intChan <- i
	}
	// 定义一个有5个string数据的管道
	stringChan := make(chan string, 5)
	for i :=0; i < 5; i++ {
		stringChan <- "hello" + fmt.Sprintf("%d", i)
	}

	for {
		select {
		case v := <-intChan:
			fmt.Printf("从intChan收到数据：%d\n", v)
			time.Sleep(time.Second)
		case v := <-stringChan:
			fmt.Printf("从stringChan收到数据：%s\n", v)
			time.Sleep(time.Second)
		default:
			fmt.Println("管道中没有数据")
			return //注意退出
			// 不用close的原因是：如果管道中没有数据，select阻塞之后会直接default后返回，不会死锁
		}
	}
}